package com.chushouya.manager.service.admin;


import com.chushouya.manager.dao.entity.AdminUserEntity;
import com.chushouya.manager.dto.admin.user.*;
import com.general.framework.core.schema.PageResult;
import com.chushouya.manager.dto.admin.user.*;

import java.util.List;

/**
 * Admin用户业务
 */
public interface AdminUserService {

    /**
     * 根据条件分页查询用户列表
     */
    PageResult<AdminUserListDTO> selectUserPageResult(AdminUserQuery query);

    /**
     * 更新用户最后登录信息
     * @param adminUserId 用户ID
     * @param loginIp IP地址
     */
    void updateLastLoginInfo(Long adminUserId, String loginIp);

    /**
     * 保存用户信息
     */
    Long saveUser(AdminUserSaveDTO adminUser);

    /**
     * 是否为超级管理员
     */
    boolean isSuperAdmin(Long adminUserId);

    /**
     * 校验用户是否可以执行操作
     */
    void checkUserAllowed();

    /**
     * 重置密码
     */
    void resetPassword(Long adminUserId, String password);

    /**
     * 修改用户状态
     */
    void changeStatus(Long adminUserId, Integer status);

    /**
     * 用户授权角色
     */
    void grantRole(Long adminUserId, List<Long> roleIdList);

    /**
     * 修改密码
     */
    void updatePassword(Long adminUserId, String oldPassword, String password);

    /**
     * 查询当前角色未分配的用户列表
     */
    PageResult<AdminUserListDTO> selectUnAllocatedList(AdminUserQuery query);

    /**
     * 查询当前角色已分配的用户列表
     */
    PageResult<AdminUserListDTO> selectAllocatedList(AdminUserQuery query);

    /**
     * 根据用户登录名查询用户
     */
    AdminUserEntity selectUserName(Integer userType, String userName);

    /**
     * 查询用户详情
     */
    AdminUserSaveDTO getUserDetail(Long adminUserId);

    void deleteUser(Long adminUserId);

    Long createProxyUserAccount(String proxyName, String contactUser, String contactPhone);

    Long createPartnerUserAccount(CreateAdminUserAccount adminUserCreate);

    List<SimpleAdminUserDTO> selectSimpleAdminUser(List<Long> collect);

    List<SimpleAdminUserDTO> selectSimpleAdminUser(List<Long> deptIdList, String keyword);
}
